package com.copa.l78;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author copa
 * @createDate 2022-05-17 17:07
 * @function 暴力法（扩展法）
 */
public class Test2 {

    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> result = new ArrayList<>();
        // 这里先加[]（空集合）
        result.add(new ArrayList<>());
        for (int num : nums) {
            // 对nums逐个遍历
            // 这里定义是为了防止引用传递
            List<List<Integer>> subsetList = new ArrayList<>();
            for (List<Integer> list : result) {
                // 这里遍历是为了让现有result的集合都加上num的值
                // 这里定义也是为了防止引用传递
                List<Integer> subset = new ArrayList<>(list);
                subset.add(num);
                subsetList.add(subset);
            }
            for (List<Integer> list : subsetList) {
                // 添加subsetList的集合到结果集中
                result.add(list);
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] nums = new int[]{1,2,3};
        List<List<Integer>> result = new Test2().subsets(nums);
        for (List<Integer> list : result) {
            System.out.println(Arrays.toString(list.toArray()));
        }
    }
}
